lexer grammar AnalexSAM;

options
 {
 	k=3;
 	backtrack = true;
 }

BREAK : 'break' 
	;

CONTINUE 
	: 'continue';
ELSE 
	: 'else';
INT 
	: 'int';
LONG 
	: 'long';
IF 
	: 'if';
WHILE 
	: 'while';
RETURN 
	: 'return';
BLANCO
	: (' ' | '\t' | '\n' | '\r')
	{ $channel=HIDDEN; }
	;
COMENTARIO
	: ('/*' ( options {greedy=false;} : . )* '*/')
	{ $channel=HIDDEN; }
	;
fragment LETRA
	:('a'..'z'
	| 'A'..'Z'
	| '_')
	;
fragment DIGITO
    : '0'..'9';
IGUAL     
	: '=' ;
MAS     
	: '+' ;
MENOS   
	: '-' ;
POR     
	: '*' ;
EXCLAINI 
	: '¡';
INTERINI 
	: '¿';
EXCLAINIIGUAL 
	: '¡=';
EXCLAFINIGUAL 
	: '!=';
INTERINIIGUAL 
	: '¿=';
EQUIAVLENTE 
	: '==';
ABREPAR   
	: '(' ;
CIERRAPAR 
	: ')' ;
ABRELLAVE		
	: '{' ;	
CIERRALLAVE	
	: '}' ;
COMA    
	: ',' ;
PUNTOYCOMA	
	: ';' ;
DIVIDIDO  
	: '/' ;
PORCENTAJE 
	: '%';
AND 		
	: '&' ;
BARRA     
	: '|' ;
ELEVADO     
	: '^' ;
MENOR     
	: '<' ;
MAYOR     
	: '>' ;
MENORIGUAL     
	: '<=' ;
MAYORIGUAL     
	: '>=' ;
EQUIVALENTE     
	: '==' ;
DISTINTO     
	: '!=' ;
SUBRAYADO 
	: '_';
INCREMENTA 
	: '+=' ;			
DECREMENTA 
	: '-=' ;
MULTIPLICA 
	: '*=' ;
DIVIDE  
	: '/=' ;
MODULO 
	: '%=' ;
DOBLEMAS 
	: '++' ;
DOBLEMENOS 	
	: '--' ;
NUMERO
	: (DIGITO)+;
ID
	: (LETRA|SUBRAYADO) (LETRA|NUMERO|SUBRAYADO)*;